home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 626-637 / disk_626 / mmu / mmu.txt < prev    next >
Text File  |  1992-05-06  |  15KB  |  323 lines

  1. MMU Role in Amiga 3000 system                 by L.Vanhelsuwé © 26-AUG-1991
  2. -----------------------------                 -----------------------------
  3.  
  4. The 68030 inside an Amiga 3000 contains an on-chip MMU (Memory Management Unit).
  5. MMUs are used in computer systems to translate 'logical' addresses (LAs) to
  6. 'physical' addresses (PAs).
  7. Logical addresses are those addresses that the CPU core generates during the
  8. course of program execution, in other words you, the application programmer,
  9. work with logical addresses (if you get to use pointers).
  10. These addresses might be real physical (external) addresses, but most often are
  11. not because they are translated (mapped, moved) to different physical addresses.
  12. In the course of this mapping the MMU can detect accesses to memory which does
  13. not (yet) map to real physical memory. It is via this mechanism that many
  14. big operating systems (UNIX) implement demand paged virtual memory systems.
  15.  
  16. Unfortunately on the Amiga the MMU is not (at present) used to implement
  17. virtual memory, instead the MMU is used by Exec to ensure that programs which
  18. access CHIP RAM or I/O address ranges (Zorro space, CIAs, battery-backed RTC)
  19. do continue to operate correctly.
  20. While the two seperate on-chip caches (for data and instruction) improve
  21. performance of programs they can also break programs were it not for the fact
  22. hat the MMU can define areas of memory which should never be cached or even
  23. written to !
  24. Additionaly, if your system loads the Kickstart image from hard disk, then the
  25. MMU is also used to map the standard ROM address range $F80000-$FFFFFF to
  26. wherever Kickstart has been loaded in your 32-bit wide RAM.
  27.  
  28. The MMU programming model is quite complicated.
  29. It consists of only a few on-chip registers and one or more MMU data tables
  30. located in main RAM.
  31. The structure of the data tables (called translation tables) is very flexible
  32. and is the source of the model's complexity.
  33. A detailed description is beyond the scope of this article (see the official
  34. MC68030UM/AD Motorola publication for an in-depth discussion).
  35. The on-chip MMU registers on the other hand are simple enough:
  36.  
  37. Mnemonic  Full name         Size    Description
  38. --------  ---------         ----    -----------
  39. TC       Translation Control      32    Controls various aspects of the MMU.
  40.  
  41. CRP       CPU Root Pointer        64    Basically contains a pointer to the
  42.                     translation table for user mode programs
  43.  
  44. SRP       Supervisor Root Pointer 64    Basically contains a pointer to the
  45.                                         translation table for supervisor mode
  46.                                         programs (only when enabled in TC).
  47.  
  48. TT0,TT1   Transparent Translation 32    These are identical registers which
  49.                                         define zero, one or two optional
  50.                                         memory ranges that are not translated.
  51.  
  52. MMUSR     MMU Status Register     16    Contains status information of a trans-
  53.                                         lation as initiated by a PTEST instr.
  54.                                         This register does NOT contain the MMU
  55.                                         "status" as does the SR for the 680x0.
  56.  
  57.  
  58. The following analysis has been carried out on an Amiga 3000 with the following
  59. memory/OS configuration:
  60.   - 2Mb of CHIP RAM located at $00000000-$001FFFFF (first 2Mb in 4Gb space)
  61.   - 3Mb of FAST RAM located at $07D00000-$07FFFFFF
  62.   - Kickstart v37.147
  63.  
  64. If you decide to follow the text with your own 030-based Amiga, be warned that
  65. the values you find in your Amiga will be different if your configuration and
  66. OS version aren't the same as mine.
  67.  
  68. Using a simple little program like the one below you can read out the contents
  69. of your MMU registers. Use a debugging program to actually view the results
  70. produced (display memory $200 onwards).
  71.  
  72. ***************************************************************************
  73. ** 68030 MMU register read-out program.
  74. ***************************************************************************
  75.  
  76. START:        move.l    4,a6
  77.         lea    in_supermode,a5
  78.         EXEC    Supervisor      ;call Exec's Supervisor() function
  79.         rts
  80.  
  81. in_supermode    lea    $200,a0                 ;-> ROM Wack scratch area
  82.         pmove    TC,(a0)                 ;get TC contents
  83.         pmove    CRP,$10(a0)             ;idem CRP
  84.         pmove    TT0,$20(a0)             ;idem TT0
  85.         pmove    TT1,$30(a0)             ;idem TT1
  86.         rte                             ;**!! NOT RTS **!!
  87. ;-- END
  88.  
  89.  
  90. On my Amiga the TC (Translation Control) register contains the following:
  91.  
  92. $80F08630
  93.  
  94. This breaks down into the following fields:
  95.  
  96. 1000 0000 1111 0000 1000 0110 0011 0000
  97. |      || ---- ---- ---- ---- ---- ----
  98. |      ||  |    |    |    |    |     |
  99. |      ||  |    |    |    |    |    TID = 0 (No 'D' level)
  100. |      ||  |    |    |    |    ---- TIC = 3 (C table indexed by 3 LA bits
  101. |      ||  |    |    |    --------- TIB = 6 (B table indexed by 6 LA bits
  102. |      ||  |    |    -------------- TIA = 8 (A table indexed by 8 LA bits
  103. |      ||  |    ------------------- IS  = 0 (No Initial Shift)
  104. |      ||  ------------------------ PS  = 32K Page Size
  105. |      |--------------------------- FCL = 0 (Function Code Lookup disabled)
  106. |      ---------------------------- SRE = 0 (Supervisor RP disabled)
  107. ----------------------------------- E   = 1 (MMU translation enabled)
  108.  
  109. From the values of this TC register we can see that the MMU is active (E=1),
  110. i.e. it is constantly translating logical addresses (LAs) to physical addresses.
  111. 32-Bit LAs are broken down as follows for translation table indexing purposes:
  112.  
  113.  
  114.     31             15            0
  115.     |             |            |
  116.     aaaa aaaa bbbb bb cc c ooo oooo oooo oooo
  117.     _________ _______ ____ __________________
  118.      A-FIELD  B-FIELD  C-F  Remaining Offset
  119.  
  120.  
  121. a = 8 bits to select one of 256 16Mb blocks within the full 4Gb LA range
  122.                  |____________________
  123.                               |
  124. b = 6 bits to select one of  64 256K blocks within a 16Mb LA range
  125.                  |____________________
  126.                               |
  127. c = 3 bits to select one of   8  32K  pages within a 256K LA range
  128.                  |_________________________
  129.                                |
  130. o = 15 bits of page offset (32K addressing range inside a 32K page)
  131.  
  132. Only one translation tree is used for both user and supervisor modes (SRE=0).
  133. This means that the CRP register points to both the user and supervisor space
  134. translation tables. 
  135.  
  136. The 64-bit CRP (CPU Root Pointer) register contains the following:
  137.  
  138. $000F0002 $07FFF140
  139.  
  140. For the most significant LONG word this breaks down to:
  141.  
  142. 0000 0000 0000 1111 0000 0000 0000 0010
  143. |------------------                  --
  144. |         |                          |
  145. |         |                         DT  = 2 (Valid 4-byte descriptors for A tab)
  146. |         ------------------------ LIMIT= 15 (max index for A level table)
  147. ----------------------------------- U/L = 0 (LIMIT field is an upper limit)
  148.  
  149. From this register we see that the top level pointer table contains short-
  150. format descriptors and that just the first 16 entries are valid (The TC
  151. register specified an 'A' level table of upto 256 entries because TIA=8, but
  152. LIMIT=15 chops the size of the table down to 16 entries).
  153.  
  154. The second long word contains the physical address of the translation table.
  155. Here's a quick unformatted view of the MMU translation table in memory:
  156.  
  157. 07FF140: 07FFF18A 01000019 02000019 03000019    Level A: 16 LONGs of short-
  158. 07FF150: 04000019 05000019 06000019 07FFF28A    format descriptors.
  159. 07FF160: 08000019 09000019 0A000019 0B000019
  160. 07FF170: 0C000019 0D000019 0E000019 0F000019
  161.  
  162. 07FF180: 00000059 00040059 00080059 000C0059    Level B (table 1)
  163. 07FF190: 00100059 00140059 00180059 001C0059    64 LONGs of short-format
  164. 07FF1A0: 00200019 00240019 00280019 002C0019    descriptors describing first
  165. 07FF1B0: 00300019 00340019 00380019 003C0019    16Mb of LA range
  166. 07FF1C0: 00400019 00440019 00480019 004C0019
  167. 07FF1D0: 00500019 00540019 00580019 005C0019
  168. 07FF1E0: 00600019 00640019 00680019 006C0019
  169. 07FF1F0: 00700019 00740019 00780019 007C0019
  170. 07FF200: 00800019 00840019 00880019 008C0019
  171. 07FF210: 00900019 00940019 00980019 009C0019
  172. 07FF220: 00A00019 00A40019 00A80019 00AC0019
  173. 07FF230: 00B00019 00B40019 00B80019 00BC0059    CIA space !
  174. 07FF240: 00C00019 00C40019 00C80019 00CC0019
  175. 07FF250: 00D00019 00D40019 00D80019 00DC0059    Custom chips space !
  176. 07FF260: 00E00059 00E40059 00E80059 00EC0059    Expansion boards space !
  177. 07FF270: 00F00019 00F40019 07F8001D 07FC001D    ROM space !
  178.  
  179. 07FF280: 07000018 07040018 07080018 070C0018    Level B (table 2)
  180. 07FF290: 07100018 07140018 07180018 071C0018    Another 64 LONGs of short-
  181. 07FF2A0: 07200018 07240018 07280018 072C0018    format descriptors.
  182. 07FF2B0: 07300018 07340018 07380018 073C0018
  183. 07FF2C0: 07400018 07440018 07480018 074C0018
  184. 07FF2D0: 07500018 07540018 07580018 075C0018
  185. 07FF2E0: 07600018 07640018 07680018 076C0018
  186. 07FF2F0: 07700018 07740018 07780018 077C0018
  187. 07FF300: 07800018 07840018 07880018 078C0018
  188. 07FF310: 07900018 07940018 07980018 079C0018
  189. 07FF320: 07A00018 07A40018 07A80018 07AC0018
  190. 07FF330: 07B00018 07B40018 07B80018 07BC0018
  191. 07FF340: 07C00019 07C40018 07C80018 07CC0018
  192. 07FF350: 07D00019 07D40019 07D80019 07DC0019    $07D0 0000 (start of 3 Mb RAM)
  193. 07FF360: 07E00019 07E40019 07E80019 07EC0019
  194. 07FF370: 07F00019 07F40019 07F8001D 07FC001D
  195.  
  196. All three tables (Level A and the two level B tables) contain mostly early
  197. termination page descriptors.
  198. There is no level C table, which is surprising since the TC register does
  199. specify that any level C tables are indexed using TIC=3 bits of the LA.
  200.  
  201. The level A table "routes" all LAs to 16Mb block descriptions.
  202. Since the 68030 has a 32-bit address bus, table A should have 256 entries
  203. (256*16M = 4Gb) to fully map the entire logical space of the CPU.
  204. Currently the Amiga doesn't use the address space above $07 FFFFFF.
  205. In other words only the first 8 16Mb blocks are used.
  206. That's why table A doesn't contain the full 256 entries but just 16, twice
  207. as much as really needed.
  208. Except for entry #0 and #7, the entire table doesn't contain further table
  209. descriptors but early termination page descriptors instead.
  210. Let's have a look at entry #1 for example (all others are the same except for
  211. the page base address).
  212.  
  213. $01000019
  214.  
  215. The top 24 bits encode the 24 Msb page address bits : $010000xx
  216. The lower byte encodes the following:
  217.  
  218. 0001 1001  ($19)
  219.  | | ||--
  220.  | | || |
  221.  | | || - DT = 1 (Descriptor Type = Page descriptor)
  222.  | | ||-- WP = 0 (Write Protect OFF)
  223.  | | |--- U  = 1 (accessed)
  224.  | |----- M  = 1 (modified)
  225.  |------- CI = 0 (Cache Inhibit OFF)
  226.  
  227. So the whole entry just translates any LA in the range $01xxxxxx into the
  228. same physical address without access restrictions.
  229. In fact, since there is no physical memory at these addresses, the bus controler
  230. of the 68030 will, when outputting this physical address, generate a bus
  231. error.
  232. Note that what this entry effectively defines is a transparent mapping from LA
  233. to PA; so transparent ranges can be defined like this too.
  234.  
  235. Entries #0 and #7 do point to level B tables.
  236. Entry #0 points to a table for the first 16Mb of the entire 4Gb space.
  237. Entry #7 points to a table for the eighth 16Mb block : $07 000000 to $07 FFFFFF.
  238.  
  239. The lowest 16Mb of the logical address space are the only addresses that a
  240. 68000 can generate, only having a 24-bit address bus ($00xxxxxx).
  241. In this address range reside the Amiga's most interesting address ranges since
  242. the original Amiga 1000 was designed around a 68000.
  243. The table descriptor $07FFF18A breaks down as follows:
  244.  
  245. The most significant 28 bits ($07FFF180) point to the level B table.
  246. Lowest 4 bits ($A):
  247.  
  248. 1010    ($A)
  249. ||--
  250. || |-   DT = 2 (Valid 4 byte)
  251. ||---   WP = 0 (Write Protect OFF)
  252. |----   U  = 1 (accessed)
  253.  
  254. These lower four bits just mean that this entry is a table pointer and not an
  255. early termination page descriptor like the other ones.
  256.  
  257. Since TIB=6 table B contains a maximum of 64 (2^6) entries; in this case it
  258. does so exactly (no LIMIT set).
  259. These 64 entries further brake down the first 16 Megabytes of the 68030 into
  260. 64 256K blocks. All entries are early termination page descriptors.
  261. The first 8 define the 2 Mb of CHIP RAM.
  262. These descriptors all have the lower byte set to $59 which means:
  263.  
  264. 0101 1001       ($59)
  265.  | | ||--
  266.  | | || |
  267.  | | || - DT = 1 (Page descriptor)
  268.  | | ||-- WP = 0 (Write Protect OFF)
  269.  | | |--- U  = 1 (accessed)
  270.  | |----- M  = 1 (modified)
  271.  |------- CI = 1 (Cache Inhibit ON)
  272.  
  273. Since custom chip DMA write cycles are interleaved with normal processor cycles
  274. (even in Blitter nasty mode), any CHIP RAM read by the 68030 should NEVER be
  275. cached on the on-chip data OR instruction caches.
  276. This ensures that the 68030 always picks up the "latest" data from CHIP RAM.
  277.  
  278. Similarly, address ranges $00BC0000-$00BFFFFF (which contains the CIA chips),
  279. $00DC0000-$00DFFFFF (the custom chips) and $00E00000-$00EFFFFF (the expansion
  280. slots) have the Cache Inhibit bit set so I/O registers never get cached.
  281.  
  282. All other page descriptors for the address range $00200000-$00F7FFFF have their
  283. lower byte set to $19, which is just the same as $59 but with the CI bit clear,
  284. in other words read data can be cached from these addresses.
  285. Apart from these range attributes, the entries don't translate the LAs to
  286. different PAs; LAs are used unmodified.
  287.  
  288. For the address range $00F80000-$00FFFFFF the table actually does specify a
  289. real address translation: this 512K range is mapped to $07F80000, the top 512K
  290. in an Amiga 3000 expanded with 3 Mb of FAST RAM.
  291. This mapping allows easy upgrades of the Kickstart system software as follows:
  292. a Kickstart image is loaded into a 512K block of free 32-bit RAM and then
  293. all references to the "old" Kickstart "ROM" re-routed to the faster RAM.
  294. Note that the low byte of the page descriptions are $1D this time:
  295.  
  296. 0001 1101       ($1D)
  297.  | | ||--
  298.  | | || \- DT = 1
  299.  | | ||--- WP = 1 (Write Protect ON)
  300.  | | |---- U  = 1 
  301.  | |------ M  = 1
  302.  --------- CI = 0
  303.  
  304. The only bit that's different this time is the WP (Write Protect) bit.
  305. So, although this 512K is part of your FAST RAM expansion, it behaves as ROM
  306. since it's write protected (WP=1).
  307.  
  308. The second B level table is concerned with the 16Mb LA range $07xxxxxx.
  309. In this range (at physical addresses $07D0 0000 - $07FF FFFF) 3Mb of FAST RAM
  310. is decoded.
  311. As you can see from the table, most of the 16Mb block has attributes $18
  312. which means DT=0, ie Invalid Descriptor.
  313. When an LA reaches one of these descriptors, the processor will generate a
  314. bus error exception.
  315. For logical addresses $07D0 0000 and upwards the descriptors are page
  316. descriptors which pass the LA through untranslated and unrestricted.
  317. The only point to note is that the top 512K of this 3Mb of RAM has a different
  318. attribute byte ($1D instead of $19) which just has the WP (Write Protect) bit
  319. set, thus rendering the RAM Kickstart copy immune from write hits.
  320.  
  321. One last detail: note that the MMU translation table itself is located inside
  322. this protected 512K area and thus can not be corrupted by mistake.
  323.